package API.RegexDome;

/**
 * ClassName:RegexText003
 * Package:API.RegexDome
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/1/31-20:49
 * @Version:v1.0
 */
public class RegexText003 {
    /*
    * 正则表达式的作用：
    * 1.校验字符串是否满足规则
    * 2.在一段文本中查找满足要求的内容
    *
    *
    * 字符类(只匹配一个字符)
    * [abc] 只能是a,b或c
    * [^abc] 除了abc之外的任何字符
    * [a-zA-Z] a到z A到Z,包括(范围)
    * [a-d[m-p]] a到d,或m到p
    * [a-z&&[def]] a-z和def的交集  为：d e f
    * [a-z&&[^bc]] a到z和非bc的交集 等同于[ad-z]
    * [a-z&&[^m-p]] a到z和除了m到p的交集 等同于[a-lq-z]
    *
    * 数量词
    * X?       X,一次或0次
    * X*       X,零次或多次
    * X+       X,一次或多次
    * X{n}     X,正好n次
    * X{n,}    X,至少n次
    * X{n,m}   X,至少n但不超过m次
    *
    *
    * []   里面的内容出现一次
    * ()   分组
    *
    * */

    public static void main(String[] args) {
        //只能是 a b c
        System.out.println("------1------");
        System.out.println("a".matches("[abc]"));//true
        System.out.println("z".matches("[abc]"));//false
        System.out.println("ab".matches("[abc]"));//false
        System.out.println("ab".matches("[abc][abc]"));//true

        //不能出现 a b c (^表示取反)
        System.out.println("------2------");
        System.out.println("z".matches("[^abc]"));//true
        System.out.println("a".matches("[^abc]"));//false
        System.out.println("zz".matches("[^abc]"));//false
        System.out.println("zz".matches("[^abc][^abc]"));//true

        //a到z A到Z(包括头尾的范围)
        System.out.println("------3------");
        System.out.println("a".matches("[a-zA-Z]"));//true
        System.out.println("S".matches("[a-zA-Z]"));//true
        System.out.println("s".matches("[a-zA-Z]"));//true
        System.out.println("9".matches("[a-zA-Z]"));//false
        System.out.println("9".matches("[a-zA-Z0-9]"));//true
        System.out.println("9".matches("[0-9]"));//true
        System.out.println("zz".matches("[a-zA-Z]"));//false
        System.out.println("zz".matches("[a-zA-Z][a-zA-Z]"));//true
        System.out.println("zA".matches("[a-zA-Z][a-zA-Z]"));//true
        System.out.println("z9".matches("[a-zA-Z][a-zA-Z0-9]"));//true
        System.out.println("z9".matches("[a-zA-Z][0-9]"));//true


        //[a-d[m-p]] a到d,或m到p
        System.out.println("------4------");
        System.out.println("a".matches("[a-d[m-p]]"));//true
        System.out.println("z".matches("[a-d[m-p]]"));//false
        System.out.println("z".matches("[a-d][m-p]"));//false
        System.out.println("m".matches("[a-d][m-p]"));//false
        System.out.println("ma".matches("[a-d][m-p]"));//false
        System.out.println("am".matches("[a-d][m-p]"));//true

        //[a-z&&[def]] a-z和def的交集  为：d e f
        //如果求两个范围的交集,写符号&&
        //如果只有一个 & 表示且,此时&不在表示交集了,只是简简单单的一个&符号
        System.out.println("------5------");
        System.out.println("a".matches("[a-z&&[def]]"));//false
        System.out.println("e".matches("[a-z&&[def]]"));//true
        System.out.println("e".matches("[a-z&[def]]"));//true
        System.out.println("a".matches("[a-z&[def]]"));//true
        System.out.println("&".matches("[a-z&[def]]"));//true
        System.out.println("0".matches("[a-z&&[def]]"));//false
        System.out.println("&".matches("[a-z&&[def]]"));//false

    }
}
